package cn.tedu.api;

/**
 * Date：2021年10月
 * Author：程Sir
 * Name： JavaSE-API
 * Content:
 */
public class IntegerDemo {
    public static void main(String[] args) {

        // 基本数据类型
        int a = 128;

        // 包装机制-1
        Integer a1 = new Integer(a);
        Integer a2 = new Integer(a);

        System.out.println(a1 == a2); // false
        /*
            Integer 提供了一个包装类和基本数据类型直接的一个转换方法
            属于静态的方法，valueof
            如果将一个基本数据类型转换为包装类时，建议使用valueof的形式进行转换
            因为0-127直接的正数都在内存中做了优化，一定程度上是可以提升程序性能。

            面试题常见知识点：
            》》对于Integer而言，valueof方法会重用1个字节（127）以内所有正数的包装类对象

         */
        // 包装机制-2
        Integer a3 = Integer.valueOf(a);
        Integer a4 = Integer.valueOf(a);
        System.out.println(a3 == a4); // true


        System.out.println("=============");

        int max = Integer.MAX_VALUE;
        int min = Integer.MIN_VALUE;
        System.out.println("最大值："+max);
        System.out.println("最小值："+min);

        // 拆解机制: 将 包装类拆为基本数据类型

        /*
              包装类转化为基本数据类型:
                   引用.intValue();
                   引用.doubleValue();
                   引用.longValue();
         */
        int aa = a3.intValue();
        int bb = a4.intValue();
        System.out.println("拆解后的基本数据类型值："+aa);
        System.out.println("拆解后的基本数据类型值："+bb);



        /*
            字符串拆为基本数据类型
            包装类提供了一个静态方法：parseInt(String str)
            解析过程一定要注意字符串所表示的语义要于转换的基本数据类型要一致，不然可能会抛出NumberFormatException异常
         */
        String str1 = "123";
        String str2 = "123.0123";

        System.out.println("=============");
        int s1 = Integer.parseInt(str1);
        System.out.println(s1);
//        int s2 = Integer.parseInt(str2);   // 运行报错：格式转换异常【str2装的是小数，无法转换为整数】
        double s2 = Double.parseDouble(str2);
        System.out.println(s2);




    }
}
